package org.example;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;

import java.io.*;
import java.util.zip.GZIPInputStream;

/**
 * .gz:对单个文件进行压缩（Gzip 格式）
 *  .tar.gz:先用 tar 打包多个文件成一个 .tar 文件，再用 gzip 压缩(（)两个步骤)
 *  本案例直接读取.tar.gz压缩文件,不需要解压.假定压缩文件内都是文本文件
 */
public class ReadTarGzLineByLine {
    public static void main(String[] args) throws Exception {

        String file = "my.tar.gz";

        try (InputStream inputStream = ReadTarGzLineByLine.class.getClassLoader().getResourceAsStream(file);
             InputStream gzipIn = new GZIPInputStream(inputStream);
             TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) {

            TarArchiveEntry entry;
            while ((entry = tarIn.getNextTarEntry()) != null) {
                if (entry.isDirectory()) continue;
                System.out.println("读取文件: " + entry.getName());
                // 用 BufferedReader 按行读取
                BufferedReader reader = new BufferedReader(new InputStreamReader(tarIn, "UTF-8"));
                String line;
                int lineNum = 0;
                while ((line = reader.readLine()) != null) {
                    lineNum++;
                    System.out.println("第 " + lineNum + " 行: " + line);
                    // 可加 break 控制只读前 N 行
//                    if (lineNum >= 5) break;
                }
                System.out.println("----- 文件预览结束 -----");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
